﻿using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Text;
using RozpoznawanieCore.KsztaltyFolder;

namespace RozpoznawanieCore
{
    class Ksztalty
    {
        ArrayList ksztalty = new ArrayList();
    public  WynikRozpoznawania  dodaj(Ksztalt k)
        {
            
            
            for (int i = 0; i < ksztalty.Count; i++)
            {
                if (ksztalty[i].Equals(k)) return null;
            }
            ksztalty.Add(k);
            Console.WriteLine("mam do polaczenia " + ksztalty.Count);
            while (lacz()) ;
            return jakisKompletnyWynik();
        }

        private WynikRozpoznawania jakisKompletnyWynik()
        {
            Ksztalt k=jakisKompletny();
            if(k==null) return null;
            WynikRozpoznawania  w=new WynikRozpoznawania();
            if (k is Notatka)
            {
                w.nazwa = "notatka";
            }

            if (k is Prostokat)
            {
                w.nazwa = "class";
            }

            if (k is Plus)
            {
                w.nazwa = "aktor";
            }
            if (k is Elipsa)
            {
                w.nazwa = "elipsa";
            }

            if (k is Circles)
            {
                w.nazwa = "kolo";
            }

            if (k is Skresl)
            {
                w.nazwa = "x";
            }

            Console.WriteLine("nazwa wyszla " + w.nazwa);
            w.strokeCollection = k.strokeCol;
            Console.WriteLine("wyszla ilosc strolkow " + k.strokeCol.Count);
            w.x1 = k.x1;
            w.x2 = k.x2;
            w.y1 = k.y1;
            w.y2 = k.y2;
            w.konczT = k.konczenie_totalne;
            return w;
        }
        private Ksztalt jakisKompletny()
    {
        int maxP = -1;
            for (int i = 0; i < ksztalty.Count; i++)
            {Ksztalt k=(Ksztalt)(ksztalty[i]);
            if (k.kompletny)
            {
                if (maxP == -1) maxP = i;
                else
                {
                    Ksztalt kk = (Ksztalt)(ksztalty[maxP]);
                    if (kk.pewnosc <= k.pewnosc)
                    {
                        maxP = i;
                    }
                }
            }
            }

            if (maxP != -1)
            {
                return (Ksztalt)(ksztalty[maxP]);
            }
            else return null;
        }
        private bool lacz()
    {
        for (int i = 0; i < ksztalty.Count; i++)
        {
            for (int j = 0; j < ksztalty.Count; j++)
            {
                if (i == j) continue;
                Console.WriteLine("prubuje polaczyc " + i + " z " + j);
                Ksztalt k = polaczKonkretne((Ksztalt)ksztalty[i], (Ksztalt)ksztalty[j]);
                if (k != null)
                {
                    Object o = ksztalty[i];
                    Object oo = ksztalty[j];
                    ksztalty.Remove(o);
                    ksztalty.Remove(oo);
                    ksztalty.Add(k);
                    Console.WriteLine("poloczono");
                    return true;
                }
                Console.WriteLine(" NIE poloczono");
            }
        }

        return false;
    }


private Ksztalt polaczKonkretne(Ksztalt k1, Ksztalt k2)
{
    
    Ksztalt k = k1.dolaczDoMnie(k2);
    return k;
}

    } 

}

